#pragma once

#include "IGameState.h"
#include "Time\TimeManager.h"
#include "Menus\GameStateUserInterface.h"
#include "Menus\Button.h"

class CameraSystem;
class World;
class GameStateObject;

namespace ZeEngine
{
	class Timer;
}

class GameState : public ZeEngine::IGameState, public IMouseListener
{
public:
    GameState();
    virtual ~GameState();

    virtual bool Init(ZeEngine::GameEngine& gameEngine) override;
    virtual void PreUpdate(ZeEngine::GameEngine& gameEngine) override;
    virtual bool Update(ZeEngine::GameEngine& gameEngine) override;
    virtual void PostUpdate(ZeEngine::GameEngine& gameEngine) override;
    virtual void Destroy(ZeEngine::GameEngine& gameEngine) override;
    virtual void StateIn() override;
    virtual void StateOut() override;

    //MouseListener
    virtual bool OnMouseMoved(const Vector2D<s32>& absolute, const Vector2D<s32>& relative);
    virtual bool OnMouseButtonPressed(const Vector2D<s32>& absolute, s32 button);
    virtual bool OnMouseButtonReleased(const Vector2D<s32>& absolute, s32 button);

private:

    std::unique_ptr<GameStateUserInterface> m_userInterface;
    std::shared_ptr<GameStateObject>        m_gameStateObject;

};

